/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package gestInt.controlador;

import gestInt.DAO.EstudianteJpaController;
import gestInt.DAO.PersonaJpaController;
import gestInt.DAO.exceptions.NonexistentEntityException;
import gestInt.DAO.exceptions.RollbackFailureException;
import gestInt.modelo.Estudiante;
import gestInt.modelo.EstudiantePK;
import gestInt.modelo.Persona;
import java.io.IOException;
import java.io.Serializable;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.annotation.Resource;
import javax.enterprise.context.SessionScoped;
import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
import javax.inject.Named;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import javax.transaction.UserTransaction;
import org.primefaces.context.RequestContext;

/**
 *
 * @author elkin
 */
@Named(value = "estudianteController")
@SessionScoped
public class EstudianteController implements Serializable {

    @Resource
    private UserTransaction utx;

    private Estudiante objEstudiante;
    private final EstudianteJpaController jpaEstudiante;
    private List<Estudiante> lstEstudiantes;
    boolean encontrado;
    
    /**
     * Creates a new instance of EstudianteController
     */
    public EstudianteController() {
        EntityManagerFactory emf = Persistence.createEntityManagerFactory("GestIntPU");
        this.objEstudiante = new Estudiante();
        this.jpaEstudiante = new EstudianteJpaController(utx, emf);
        this.encontrado = false;
        this.lstEstudiantes = this.jpaEstudiante.findEstudianteEntities();
    }
    
    public void registrarEstudiante() {
        
        for (Estudiante estudiante : lstEstudiantes) {
            int codigo1 = this.objEstudiante.getEstudiantePK().getCodigo();
            int codigo2 = estudiante.getEstudiantePK().getCodigo();
            if (codigo1 == codigo2) {
                this.encontrado = true;
            }
        }

        if (!this.encontrado) {
            try {
                this.jpaEstudiante.create(objEstudiante);
            } catch (RollbackFailureException ex) {
                Logger.getLogger(EstudianteController.class.getName()).log(Level.SEVERE, null, ex);
            } catch (Exception ex) {
                Logger.getLogger(EstudianteController.class.getName()).log(Level.SEVERE, null, ex);
            }
            
            FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO,
                    "Registro exitoso", null));
        } else {
            this.encontrado = false;
            FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR,
                    "El codigo suministrado ya ha sido registrado", null));
        }

    }

    public void eliminarEstudiante() {

        EstudiantePK idEliminar = this.objEstudiante.getEstudiantePK();
        try {
            this.jpaEstudiante.destroy(idEliminar);
        } catch (RollbackFailureException ex) {
            Logger.getLogger(EstudianteController.class.getName()).log(Level.SEVERE, null, ex);
        } catch (Exception ex) {
            Logger.getLogger(EstudianteController.class.getName()).log(Level.SEVERE, null, ex);
        }
        try {
            FacesContext.getCurrentInstance().getExternalContext().redirect("");
        } catch (IOException ex) {
            Logger.getLogger(EstudianteController.class.getName()).log(Level.SEVERE, null, ex);
        }
        
    }

    public void editarEstudiante() {

        try {
            this.jpaEstudiante.edit(this.objEstudiante);
        } catch (RollbackFailureException ex) {
            Logger.getLogger(EstudianteController.class.getName()).log(Level.SEVERE, null, ex);
        } catch (Exception ex) {
            Logger.getLogger(EstudianteController.class.getName()).log(Level.SEVERE, null, ex);
        }
        
    }

    public void limpiar() {
        System.out.println("en limpiar");
        RequestContext.getCurrentInstance().reset("form:panel");
    }

    public void limpiarObjEstudiante() {

    }

    public List<Estudiante> getLstEstudiantes() {
        return lstEstudiantes;
    }

    public void setLstEstudiantes(List<Estudiante> lstEstudiantes) {
        this.lstEstudiantes = lstEstudiantes;
    }

    public Estudiante getObjEstudiante() {
        return objEstudiante;
    }

    public void setObjEstudiante(Estudiante objEstudiante) {
        this.objEstudiante = objEstudiante;
    }
    
}
